// pages/expressGet/expressGet.js
import WxValidate from "../../utils/WxValidate"
import utils from "../../utils/util"
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    currentType: 0, //记录保存点击的类型
    expressType: [{
        name: "小件",
        tips: "小件：手机巴掌大小的快件，价格3元",
        money: 3
      },
      {
        name: "中件",
        tips: "中件：鞋服盒子大小的快件，价格5元",
        money: 5
      },
      {
        name: "大件",
        tips: "大件：重量超过5公斤的快件，价格8元",
        money: 8
      }
    ],
    bussinessArray: ['请选择快递点', '圆通速递(校外)', '顺丰快递(正大门)', '百世快递 (小北门)', '中通快递(小北门)', '邮政包裹(校外)'], //快递商家数组
    bussinessIndex: 0, //选中得快递商家数组下标
    arriveTimeArray: ['不限制', '尽快送达', '今天中午', '今天晚上'],
    arriveTimeIndex: 0,
    genderArray: ['不限制', '只限男生', '只限女生'],
    genderIndex: 0,
    expressNumberArray: ['1个', '2个', '3个', '4个', '5个'],
    expressNumberIndex: 0,
    isReward: false,
    moreInfo: false,
    form: {
      expressType: '', //快递类型 
      address: '', //收件地址 
      bussiness: '', //快递商家 
      img: '', //取件截图 
      expressInfo: '', //取件信息 
      mark: '', //备注信息 
      arriveTime: '不限制', //期望送达 
      genderLimit: '不限制性别', //性别限制
      expressNum: 1, //快递数量 
      payMoney: 3, //最终付款金额，默认3元为小件的金额 
    },
    priseMoney: 0, //赏金
  },

  //取件信息、备注信息 输入框防抖 
  timeID: 0,
  //定时器ID 
  handleInput(e) {
    const {
      name
    } = e.currentTarget.dataset
    const {
      value
    } = e.detail
    clearTimeout(this.timeID);
    //清楚timeID对应的定时器，即取消相应函数的执行 
    this.timeID = setTimeout(() => {
      if (name === "expressInfo") {
        this.setData({
          "form.expressInfo": value
        })
      } else {
        this.setData({
          "form.mark": value
        })
      }
    }, 1000)
  },

  //取件信息 上传图片 
  uploadImg() {
    //调用wx.chooseMedia API打开图片选择窗口 
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['original', 'compressed'],
      success: (res) => {
        //chooseMedia成功回调 
        wx.showLoading({
          title: '上传中'
        })
        //使用wx.uploadFile将图片发至服务端上传 
        wx.uploadFile({
          filePath: res.tempFiles[0].tempFilePath,
          //文件暂存路径 
          name: 'img',
          //文件对应的 key 
          url: `${app.globalData.server}/uploadImg`,
          //服务端路由 
          success: (result) => { //成功回调 
            //result.data为字符串，使用JSON.parse转成对象 
            let filePath = JSON.parse(result.data).path;
            //文件路径为\反斜杠，需要转为斜杠/，使用正则表达式进行过滤转换 
            filePath = filePath.replace(/\\/g, '/');
            let form = this.data.form;
            //将完整的文件路径（含有域名信息）赋值给userInfo 
            form.img = `${app.globalData.server}/${filePath}`;
            this.setData({
              form
            })
            wx.hideLoading({})
            wx.showToast({
              title: '上传成功',
              icon: "success"
            })
          },
          fail: (e) => {
            //失败回调 
            console.log(e)
            wx.hideLoading({})
            wx.showToast({
              title: '上传失败',
              icon: "error"
            })
          }
        })
      },
      fail: error => {
        //chooseMedia失败回调 
        console.log(error)
        wx.showToast({
          title: '上传失败',
          icon: "error"
        })
      }
    })
  },

  // 跳转到地址列表页
  toSelectedAAddress() {
    wx.navigateTo({
      url: '../address/address',
    })
  },

  // 免责声明
  showStatment() {
    wx.showModal({
      title: '用户条款&隐私策略',
      content: '这里是隐私条款具体内容',
      showCancel: false
    })
  },

  // 快递商家选择,更改下标
  bussinessChange(e) {
    const index = e.detail.value
    this.setData({
      bussinessIndex: index,
      'form.bussiness': this.data.bussinessArray[index]
    })
  },

  // 期望送达时间，更改下标
  arriveChange(e) {
    this.setData({
      arriveTimeIndex: e.detail.value,
      "form.arriveTime": this.data.arriveTimeArray[e.detail.value]
    })
  },

  // 性别限制，更改下标
  genderChange(e) {
    this.setData({
      genderIndex: e.detail.value,
      "form.genderLimit": this.data.genderArray[e.detail.value]
    })
  },

  //快递数量 
  expressNumChange(e) {
    this.setData({
      expressNumIndex: e.detail.value,
      "form.expressNum": this.data.expressNumArray[e.detail.value]
    })
  },

  // 显示更多信息
  setMoreInfo() {
    this.setData({
      moreInfo: !this.data.moreInfo
    })
  },

  // 加急打赏开关
  setReward() {
    this.setData({
      isReward: !this.data.isReward
    })
  },

  // 分类选择
  //选择快递大小 
  chooseType(e) {
    //获取前端传递的快递类别索引 
    const index = e.currentTarget.dataset.index;
    const expresstype = this.data.expressType[index]
    //快递大小对应的金额 与 赏金 相加 
    const payMoney = Number(expresstype.money) + Number(this.data.priseMoney)
    //对data中的变量进行赋值 
    this.setData({
      currentType: index,
      'form.expressType': expresstype.name,
      'form.payMoney': payMoney
    });
    wx.showToast({
      title: expresstype.tips,
      icon: "none"
    })
  },
  //增加赏金 
  addPayMoney(e) {
    //获取输入值 
    console.log(e)
    const priseMoney = e.detail.value;
    // console.log(priseMoney)
    //获取当前快件类型对应的金额 
    const money = this.data.expressType[this.data.currentType].money;
    //console.log(money) 
    //快件类型对应的金额 与 赏金 相加 
    const payMoney = Number(priseMoney) + Number(money);
    this.setData({
      priseMoney,
      'form.payMoney': payMoney
    })
  },
  //提交表单 
  async submitForm() {
    //判断当前用户是否已授权登录 
    const r = await utils.cklogin(app.globalData.userInfo)
    if (!r) {
      return false
    }
    const {
      expressType,
      address,
      bussiness,
      img,
      expressInfo,
      mark,
      arriveTime,
      genderLimit,
      expressNum,
      payMoney
    } = this.data.form;
    //判断 地址、商家是否已获取 
    const params = {
      address,
      bussiness
    }
    if (!this.WxValidate.checkForm(params)) {
      const errors = this.WxValidate.errorList[0]
      utils.showValidateModal(errors);
      return false;
    }
    //检查 取件信息 
    if (!img && !expressInfo) {
      wx.showModal({
        title: '提示',
        content: '请输入取件码或上传截图',
        showCancel: false
      })
      return false;
    }
    //声明发布数据时间变量，值为当前时间 
    const publicTime = utils.formatTime(new Date());
    //保存数据库 
    wx.showLoading({})
    wx.request({
      url: `${app.globalData.server}/addOrder`,
      method: 'POST',
      data: {
        orderType: '快递代取',
        penid: app.globalData.userInfo.openid,
        endAddress: address, //目的地 
        startAddress: `快递点-${bussiness}`, //起点 
        payMoney, //支付金额 
        status: '待帮助', //订单状态 
        publicTime, //发布时间 
        info: {
          //其他信息 
          expressType, //快递大小 
          img, //取件图片 
          expressInfo, //取件信息 
          mark, //备注信息 
          arriveTime, //期望送达 
          genderLimit, //性别限制 
          expressNum, //快递数量 
        },
        userInfo: app.globalData.userInfo //发布者的个人信息 
      },
      success: (res) => {
        wx.hideLoading({})
        if (res.data == 'success') {
          wx.showToast({
            title: '提交成功',
            icon: 'success'
          })
          setTimeout(() => {
            wx.switchTab({
              url: '../order/order',
            })
          }, 1000);
        } else {
          wx.hideLoading({})
          wx.showToast({
            title: '发布失败',
            icon: 'error'
          })
        }
      },
      fail: (err) => {
        wx.hideLoading({})
        wx.showToast({
          title: '发布失败',
          icon: 'error'
        })
      }
    })
  },
  /*** 生命周期函数--监听页面加载 */
  onLoad(options) {
    this.initValidate();
  },
  initValidate() {
    // 验证字段的规则 
    const rules = {
      address: {
        required: true,
      },
      bussiness: {
        required: true,
      }
    }
    // 验证字段的提示信息，若不传则调用默认的信息 
    const messages = {
      address: {
        required: '请选择收件地址',
      },
      bussiness: {
        required: '请选择快递商家',
      }
    }
    // 创建实例对象 
    this.WxValidate = new WxValidate(rules, messages)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})